package com.urea.web.controller.urea.api;

import com.alibaba.fastjson2.JSONObject;
import com.urea.common.core.controller.BaseController;
import com.urea.common.core.domain.AjaxResult;
import com.urea.common.enums.BusinessStatus;
import com.urea.common.exception.ServiceException;
import com.urea.system.constants.BusinessConstants;
import com.urea.system.domain.vo.OrderVo;
import com.urea.system.domain.vo.PayVo;
import com.urea.system.service.IPayService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Objects;

/**
 * 类描述:
 *
 * @author fangXu
 * @version 1.0
 * @date 2023/8/24 17:58
 */
@RestController
@RequestMapping("/api/wx/pay")
@Api(tags = "支付相关")
public class PayController extends BaseController {

    @Autowired
    private IPayService payService;

    @GetMapping("/bindWxConf")
    @ApiOperation("支付相关参数绑定")
    public AjaxResult bindWxConf(String merchantId, String appid) {
        payService.bindWxConf(merchantId, appid);
        return success();
    }

    @GetMapping("/delayed")
    @ApiOperation("延迟结算权限开通")
    public AjaxResult delayed(String merchantId, String delayedSettleType) {
        payService.delayed(merchantId, delayedSettleType);
        return success();
    }


    /**
     * 小程序支付接口
     *
     * @param vo 支付信息
     * @return 预支付接口
     */
    @PostMapping("/pay")
    @ApiOperation("加注")
    public AjaxResult pay(@RequestBody PayVo vo) {
        return payService.pay(vo);
    }

    /**
     * 支付成功回调通知
     *
     * @param json 通知信息
     * @return 结果
     */
    @PostMapping("/paySuccess")
    @ApiOperation("成功回调")
    public JSONObject paySuccess(@RequestBody JSONObject json) {
        return payService.paySuccess(json);
    }


    /**
     * 充值
     *
     * @param vo 充值信息
     * @return 结果
     */
    @PostMapping("/recharge")
    @ApiOperation("充值")
    public AjaxResult recharge(@ApiParam @RequestBody PayVo vo) {
        return payService.recharge(vo);
    }

    /**
     * 终端续费
     *
     * @param vo 充值信息
     * @return 结果
     */
    @PostMapping("/terminal/renew")
    @ApiOperation("终端续费")
    public AjaxResult renew(@ApiParam @RequestBody PayVo vo) {
        return payService.renew(vo);
    }

    /**
     * 退款
     *
     * @param vo 退款信息
     * @return 结果
     */
    @PostMapping("/unifyRefund")
    @ApiOperation("退款")
    public AjaxResult unifyRefund(@ApiParam @RequestBody PayVo vo) {
        return payService.unifyRefund(vo);
    }

    /**
     * 退款成功回调通知
     *
     * @param json 通知信息
     * @return 结果
     */
    @PostMapping("/unifyRefundSuccess")
    @ApiOperation("退款成功回调通知")
    public JSONObject unifyRefundSuccess(@RequestBody JSONObject json) {
        return payService.unifyRefundSuccess(json);
    }

    /**
     * 取消支付
     * @param vo 订单信息
     * @return 结果
     */
    @PostMapping("/cancelPay")
    @ApiOperation("取消支付")
    public AjaxResult cancelPay(@RequestBody OrderVo vo) {
        payService.cancelPay(vo);
        return AjaxResult.success();
    }

}
